'''
json 是一个文本序列化格式，而 pickle 是一个二进制序列化格式；
json 是我们可以直观阅读的，而 pickle 不可以；
json 是可互操作的，在 Python 系统之外广泛使用，而 pickle 则是 Python 专用的；
默认情况下，json 只能表示 Python 内置类型的子集，不能表示自定义的类；但 pickle 可以表示大量的 Python 数据类型。
'''
import json

d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}
# 字典转成json字符串 加上ensure_ascii=False以后，可以识别中文， indent=4是间隔4个空格显示
# print(json.dumps(d, ensure_ascii=False, indent=2))

# 打开一个名字为‘users.json’的空文件
# fw =open('users.json','w',encoding='utf-8')
#
# json.dump(d,fw,ensure_ascii=False,indent=4)

# loads()函数可以将 json 字符串转换成 Python 的数据类型
# f =open('users.json','r',encoding='utf-8')
# 读文件
# res=f.read()
# print(json.loads(res))

# load()跟loads()功能相似，load()函数可以将 json 字符串转换成 Python 数据类型，不同的是前者的参数是一个文件对象，不需要再单独读此文件
# f =open('users.json','r',encoding='utf-8')
# print(json.load(f))


'''
dumps 和 dump 的区别在于前者是将对象序列化，而后者是将对象序列化并保存到文件中。

loads 和 load 的区别在于前者是将序列化的字符串反序列化，而后者是将序列化的字符串从文件读取并反序列化。
'''
import pickle
# data =  ['A', 'B', 'C','D']
# print(pickle.dumps(data))

# dump()函数可以将数据通过特殊的形式转换为只有python语言认识的字符串，并写入文件
# data =  ['A', 'B', 'C','D']
# with open('test.txt', 'wb') as f:
#     pickle.dump(data, f)
# print('写入成功')

# loads()函数可以将pickle数据转换为python的数据结构
# data = ['A', 'B', 'C', 'D']
# datastr = pickle.dumps(data)
# msg = pickle.loads(datastr)
# print(msg)

# load()函数可以从数据文件中读取数据，并转换为python的数据结构
with open('test.txt', 'rb') as f:
   data = pickle.load(f)
print(data)